package com.courir.data;

import lombok.Data;

import org.joda.time.DateTime;
import org.joda.time.Duration;

@Data
public class Teilnehmer {
	public static final Teilnehmer Empty = new Teilnehmer("", "", null,
			Geschlecht.NA, Verein.Empty, -1, Lauf.NA, null);

	// Personenbezogene Daten
	private final String nachname;
	private final String vorname;
	private final DateTime geburtsdatum;
	private final Geschlecht geschlecht;

	// Verein
	private final Verein verein;

	// Laufdaten
	private final int startnummer;
	private final Lauf lauf;
	private final Duration zeit;

	public Teilnehmer withName(String nachname) {
		return new Teilnehmer(nachname, vorname, geburtsdatum, geschlecht,
				verein, startnummer, lauf, zeit);
	}

	public Teilnehmer withVorname(String vorname) {
		return new Teilnehmer(nachname, vorname, geburtsdatum, geschlecht,
				verein, startnummer, lauf, zeit);
	}

	public Teilnehmer withGeburtsdatum(DateTime geburtsdatum) {
		return new Teilnehmer(nachname, vorname, geburtsdatum, geschlecht,
				verein, startnummer, lauf, zeit);
	}

	public Teilnehmer withGeschlecht(Geschlecht geschlecht) {
		return new Teilnehmer(nachname, vorname, geburtsdatum, geschlecht,
				verein, startnummer, lauf, zeit);
	}

	public Teilnehmer withVerein(Verein verein) {
		return new Teilnehmer(nachname, vorname, geburtsdatum, geschlecht,
				verein, startnummer, lauf, zeit);
	}

	public Teilnehmer withStartnummer(int startnummer) {
		return new Teilnehmer(nachname, vorname, geburtsdatum, geschlecht,
				verein, startnummer, lauf, zeit);
	}

	public Teilnehmer withLauf(Lauf lauf) {
		return new Teilnehmer(nachname, vorname, geburtsdatum, geschlecht,
				verein, startnummer, lauf, zeit);
	}

	public Teilnehmer withZeit(Duration zeit) {
		return new Teilnehmer(nachname, vorname, geburtsdatum, geschlecht,
				verein, startnummer, lauf, zeit);
	}
}